#ifndef __REMOVEELEMENT_H__
#define __REMOVEELEMENT_H__

#include "ListHeader.h"

/*
* leetcode 203 移除链表元素
* 给你一个链表的头节点 head 和一个整数 val
* 请你删除链表中所有满足 Node.val == val 的节点, 并返回 新的头节点
*/

List* RemoveElement(List* head, int val) {
	//注意: 删除节点时, 必须只想被删除节点的前一个节点
	//这里使用了一个虚拟头节点, 避免了操作节点是否为头节点的判断
	List* result = new List;
	result->next = head;

	List* move = result;
	//判断 next 为 nullptr, 即判断 move 是否为最后一个元素
	while (move->next != nullptr) {
		if (move->next->Data == val) {
			List* temp = move->next;
			move->next = temp->next;
			delete temp;
		}
		else {	//注意, 这里并不需要每次循环 move 往后移, 在不删除元素时往后移即可
			move = move->next;
		}
	}


	move = result;
	result = result->next;
	delete move;
	return result;
}

#endif // !__REMOVEELEMENT_H__

